//
// Created by 马皓然 on 2025/10/25.
//

#ifndef XIAOMI_TEST_MOTOR_MANAGER_H
#define XIAOMI_TEST_MOTOR_MANAGER_H

#include "stm32f4xx_hal.h"
#include "cybergear_protocol.h" // 依赖电机协议层

// 定义电机运行状态
typedef enum {
    MOTOR_STATE_UNKNOWN = 0,
    MOTOR_STATE_STOPPED,    // 停止模式 (CAN Mode 4)
    MOTOR_STATE_ENABLED,    // 使能模式 (CAN Mode 3)
    MOTOR_STATE_RUNNING,    // 运行中 (周期性发送控制指令)
    MOTOR_STATE_FAULT       // 故障/错误状态
} Motor_State_t;

// 单个电机实例的数据结构
typedef struct {
    uint8_t id;                       // 电机 CAN ID (例如 0x01)
    Motor_State_t state;              // 当前状态
    float target_pos;                 // 目标位置 (由运动规划层写入)
    float target_vel;                 // 目标速度
    float kp;                         // 当前使用的 Kp
    float kd;                         // 当前使用的 Kd
} Motor_Instance_t;

// 外部引用 CAN 句柄 (CubeMX 生成)
extern CAN_HandleTypeDef hcan1;

// 函数声明
void Motor_Manager_Init(Motor_Instance_t *motor, uint8_t motor_id);
uint8_t Motor_Manager_Enable(Motor_Instance_t *motor);
uint8_t Motor_Manager_Stop(Motor_Instance_t *motor);
uint8_t Motor_Manager_Set_Mode(Motor_Instance_t *motor, uint8_t run_mode);
uint8_t Motor_Manager_Update_Control(Motor_Instance_t *motor);




#endif //XIAOMI_TEST_MOTOR_MANAGER_H